package cn.tedu.spring_security.config;

import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.builders.WebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;

@Configuration
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests()
                //"/about/**","/signup/**" 这些路径全部放过, 不登录可以看
                // 经过了安全过滤器，被设置为放过
                .mvcMatchers("/about/**", "/signup/**").permitAll()
                // http授权请求匹配了“/admin/**”时候，需要用户有 ADMIN 角色
                .mvcMatchers("/admin/**").hasRole("ADMIN") //必须是管理员
                // http url 配置有先后次序，先设置的规则优先处理，具体匹配规则需要在前面处理
                .mvcMatchers("/accounts/edit_password.html").hasRole("USER")
                .mvcMatchers("/accounts/**").hasRole("ADMIN")
                //登录就可以访问其他的页面
                .anyRequest().authenticated() //其他请求需要登录, 也就是登录就可以访问
                //使用表单方式登录，如果没有登录就打开登录表单
                .and().formLogin();
    }

    /**
     * 配置web安全，绕过Spring Security 的过滤器链条
     */
    @Override
    public void configure(WebSecurity web) throws Exception {
        //ignoring 忽略， 这里指忽略过滤器
        web.ignoring().mvcMatchers("/images/**",
                "/scripts/**", "/css/**", "/actuator/**");
    }
}
